객체지향의 사실과 오해

7장 중 코드가 나오는 장은 마지막 7장 밖에 없다. 1~6장까지는 객체지향을 코드 없이 설명한다. 그동안은 막연히 객체지향의 장점과 어떻게 객체지향 프로그래밍을 하는지만 대략 알고 있었다. 객체가 가진 역할과 책임 등에 대한 생각 없이 생각나는 대로 클래스를 묶는 수준이었다. 사실 객체지향 프로그래밍을 거의 해보지 않았다. 장점이 와닿지 않았고 절차지향으로 가능한 코드를 굳이 더 복잡한 방식으로 짜야 하는가에 대한 의문이 들었었다. 아마 객체지향을 접하기 전 이 책부터 읽었으면 좋았을 뻔했다. 대략적인 내용은 아래와 같다.

객체는 서로 협력하며 각자의 책임을 수행한다. 협력을 하기 위해서는 요청과 응답이 필요하다. 이는 메시지라고 하는데 메시지는 너무 추상적이어도 구체적이어도 안된다. 추상적이면 객체선택이 어렵고 구체적이면 객체의 자율성이 침해된다. 또한 메시지를 수행할 수 있다면 객체는 대체 가능하다. 여기서 객체지향의 핵심개념인 다형성이 등장한다.

객체가 책임을 수행하는 방법은 자율적으로 선택할 수 있다. 즉 객체는 메서드를 자율적으로 선택하며 메서드 내부는 캡슐화되어 외부에서 알지 못한다. 이는 side effect를 막아준다. 자율적인 객체는 상태와 행동을 함께 가진다. 이 덕분에 코드파악이 절차지향 프로그래밍보다 쉽다.

객체에는 상태가 있다. 하지만 상태를 중심으로 객체를 바라보면 안 된다. 행동을 중심으로 생각해야 한다. 상태는 특정시점에 객체의 행동으로 인해 변화된 것 뿐이다. 또한 행동을 중심으로 생각해야 객체 간의 협력관계를 잘 이용할 수 있고 재사용성이 높아지는 코드를 작성할 수 있다. 다른 데이터, 상태를 가지고 있더라도 동일하게 행동한다면 동일한 타입(클래스)에 속한다.

실제 객체지향 코드를 작성하기 위해 실제 세계에서 따온 도메인 모델로 구조를 잡는다. 그리고 유스케이스로 목적에 맞게 기능을 나눈다. 그 후 그 기능을 수행할 책임을 도메인 모델로 잡은 객체에 할당한다. 책에서는 정기예금을 예시로 들며 위 과정을 자세히 설명해준다. 또 전반적인 예시로 이상한 나라의 엘리스 이야기를 활용하여 그동안 객체지향은 현실의 모방이다 라는 다소 맞지 않은 설명으로 더 개념정리가 어려웠을 독자들을 위해 자세히 객체지향을 설명해준다.

동일한 저자인 조영호님이 집필하신 오브젝트-코드로 이해하는 객체지향 설계를 읽어봐야겠다.


Written by@Jiyon Lee
뜨거운 코드를 가르며

GitHub